using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TerrainDataset
{
    /// <summary>
    /// <para>Add Feature Class To Terrain</para>
    /// <para>Adds one or more feature classes to a terrain dataset.</para>
    /// <para>将一个或多个要素类添加到 terrain 数据集。</para>
    /// </summary>    
    [DisplayName("Add Feature Class To Terrain")]
    public class AddFeatureClassToTerrain : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddFeatureClassToTerrain()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_terrain">
        /// <para>Input Terrain</para>
        /// <para>The terrain to which feature classes will be added. The terrain dataset must already have one or more pyramid levels created.</para>
        /// <para>将添加要素类的地形。terrain 数据集必须已创建一个或多个金字塔级别。</para>
        /// </param>
        /// <param name="_in_features">
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>Identifies features being added to the terrain. Each feature must reside in the same feature dataset as the terrain and have its role defined through the following properties:</para>
        ///   <bulletList>
        ///     <bullet_item>Input Features—Name of the feature class being added to the terrain.</bullet_item><para/>
        ///     <bullet_item>Height Field—Field containing the feature's height information. Any numeric field can be specified, and z-enabled features can also choose the geometry field. If the <none> option is chosen, z-values are interpolated from the surface.</bullet_item><para/>
        ///     <bullet_item>Type—Surface feature type that defines how the features contributes to the terrain. Mass points denote features that contribute z-measurements; breaklines denote linear features with known z-measurements, and several polygon types. Breaklines and polygon-based feature types also have hard and soft qualifiers that define the interpolation behavior around the feature's edges when exporting to raster. Soft features exhibit gradual changes in slope, whereas hard features represent sharp discontinuities.</bullet_item><para/>
        ///     <bullet_item>Group—Defines the group of each contributing feature. Unspecification of breaklines and polygon surface features representing the same geographic features at different levels of detail are intended for display at certain scale ranges. Data representing the same geographic features at different levels of detail can be grouped by assigning the same numeric value. For example, assigning two boundary features with a high and low level of detail to the same group would ensure there is no overlap in their associated display scale range.</bullet_item><para/>
        ///     <bullet_item>Min/Max Resolution—Defines the range of pyramid resolutions at which the feature is enforced in the terrain. Mass points must use the smallest and largest range of values.</bullet_item><para/>
        ///     <bullet_item>Overview—Indicates whether the feature is enforced at the coarsest representation of the terrain dataset. To maximize display performance, make sure that feature classes represented in the overview contain simplified geometry. Only valid for feature types other than mass points.</bullet_item><para/>
        ///     <bullet_item>Embed—Setting this option to TRUE indicates the source features will be copied to a hidden feature class that will be referenced by and only available to the terrain. Embedded features will not be directly viewable, as they can only be accessed through terrain tools. Only valid for multipoint features.</bullet_item><para/>
        ///     <bullet_item>Embed Name—Name of the embedded feature class. Only applies if the feature is being embedded.</bullet_item><para/>
        ///     <bullet_item>Embed Fields—Specifies BLOB field attributes to be retained in the embedded feature class. These attributes can be used to symbolize the terrain. LAS attribution can be stored in BLOB fields of multipoint features through the LAS To Multipoint tool.</bullet_item><para/>
        ///     <bullet_item>Anchor—Specifies whether the point feature class will be anchored through all terrain pyramid levels. Anchor points are never filtered or thinned away to ensure they persist in the terrain surface. This option only applies to single-point feature classes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>识别要添加到地形的要素。每个要素必须与地形位于同一要素数据集中，并通过以下属性定义其角色：</para>
        ///   <bulletList>
        ///     <bullet_item>输入要素 - 要添加到地形的要素类的名称。</bullet_item><para/>
        /// <bullet_item>高度字段 - 包含要素高度信息的字段。可以指定任何数值字段，并且启用 z 的要素也可以选择几何字段。如果选择该<none>选项，则从曲面插值 z 值。</bullet_item><para/>
        ///     <bullet_item>类型 - 表面要素类型，用于定义要素对地形的影响。质量点表示有助于 z 测量的特征;虚线表示具有已知 z 测量值和多种面类型的线性要素。虚线和基于面的要素类型还具有硬限定符和软限定符，用于定义导出为栅格时要素边缘周围的插值行为。软要素表现出坡度的逐渐变化，而硬要素则表现出明显的不连续性。</bullet_item><para/>
        ///     <bullet_item>组 - 定义每个贡献要素的组。在不同细节级别上表示相同地理要素的虚线和面表面要素的未规范旨在以特定比例范围显示。可以通过分配相同的数值来对表示不同细节级别的相同地理要素的数据进行分组。例如，将两个具有高细节和低细节级别的边界要素分配给同一组将确保其关联的显示比例范围没有重叠。</bullet_item><para/>
        ///     <bullet_item>最小/最大分辨率 - 定义在地形中强制实施要素的金字塔分辨率范围。质量点必须使用最小和最大范围的值。</bullet_item><para/>
        ///     <bullet_item>概览 - 指示是否在地形数据集的最粗略表示处强制执行要素。要最大限度地提高显示性能，请确保概览中表示的要素类包含简化的几何。仅对质量点以外的要素类型有效。</bullet_item><para/>
        ///     <bullet_item>嵌入 - 将此选项设置为 TRUE 表示源要素将被复制到隐藏要素类，该要素类将被 terrain 引用且仅可用于该要素类。嵌入式要素将无法直接查看，因为它们只能通过地形工具访问。仅对多点要素有效。</bullet_item><para/>
        ///     <bullet_item>嵌入名称 - 嵌入要素类的名称。仅当正在嵌入功能时才适用。</bullet_item><para/>
        ///     <bullet_item>嵌入字段 - 指定要保留在嵌入要素类中的 BLOB 字段属性。这些属性可用于对地形进行符号化。LAS 属性可通过 LAS 转多点工具存储在多点要素的 BLOB 字段中。</bullet_item><para/>
        ///     <bullet_item>锚点 - 指定点要素类是否将锚定到所有 terrain 金字塔级别。锚点永远不会被过滤或变薄，以确保它们持续存在于地形表面。此选项仅适用于单点要素类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public AddFeatureClassToTerrain(object _in_terrain, object _in_features)
        {
            this._in_terrain = _in_terrain;
            this._in_features = _in_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Add Feature Class To Terrain";

        public override string CallName => "3d.AddFeatureClassToTerrain";

        public override List<string> AcceptEnvironments => ["autoCommit", "workspace"];

        public override object[] ParameterInfo => [_in_terrain, _in_features, _derived_out_terrain];

        /// <summary>
        /// <para>Input Terrain</para>
        /// <para>The terrain to which feature classes will be added. The terrain dataset must already have one or more pyramid levels created.</para>
        /// <para>将添加要素类的地形。terrain 数据集必须已创建一个或多个金字塔级别。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_terrain { get; set; }


        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>Identifies features being added to the terrain. Each feature must reside in the same feature dataset as the terrain and have its role defined through the following properties:</para>
        ///   <bulletList>
        ///     <bullet_item>Input Features—Name of the feature class being added to the terrain.</bullet_item><para/>
        ///     <bullet_item>Height Field—Field containing the feature's height information. Any numeric field can be specified, and z-enabled features can also choose the geometry field. If the <none> option is chosen, z-values are interpolated from the surface.</bullet_item><para/>
        ///     <bullet_item>Type—Surface feature type that defines how the features contributes to the terrain. Mass points denote features that contribute z-measurements; breaklines denote linear features with known z-measurements, and several polygon types. Breaklines and polygon-based feature types also have hard and soft qualifiers that define the interpolation behavior around the feature's edges when exporting to raster. Soft features exhibit gradual changes in slope, whereas hard features represent sharp discontinuities.</bullet_item><para/>
        ///     <bullet_item>Group—Defines the group of each contributing feature. Unspecification of breaklines and polygon surface features representing the same geographic features at different levels of detail are intended for display at certain scale ranges. Data representing the same geographic features at different levels of detail can be grouped by assigning the same numeric value. For example, assigning two boundary features with a high and low level of detail to the same group would ensure there is no overlap in their associated display scale range.</bullet_item><para/>
        ///     <bullet_item>Min/Max Resolution—Defines the range of pyramid resolutions at which the feature is enforced in the terrain. Mass points must use the smallest and largest range of values.</bullet_item><para/>
        ///     <bullet_item>Overview—Indicates whether the feature is enforced at the coarsest representation of the terrain dataset. To maximize display performance, make sure that feature classes represented in the overview contain simplified geometry. Only valid for feature types other than mass points.</bullet_item><para/>
        ///     <bullet_item>Embed—Setting this option to TRUE indicates the source features will be copied to a hidden feature class that will be referenced by and only available to the terrain. Embedded features will not be directly viewable, as they can only be accessed through terrain tools. Only valid for multipoint features.</bullet_item><para/>
        ///     <bullet_item>Embed Name—Name of the embedded feature class. Only applies if the feature is being embedded.</bullet_item><para/>
        ///     <bullet_item>Embed Fields—Specifies BLOB field attributes to be retained in the embedded feature class. These attributes can be used to symbolize the terrain. LAS attribution can be stored in BLOB fields of multipoint features through the LAS To Multipoint tool.</bullet_item><para/>
        ///     <bullet_item>Anchor—Specifies whether the point feature class will be anchored through all terrain pyramid levels. Anchor points are never filtered or thinned away to ensure they persist in the terrain surface. This option only applies to single-point feature classes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>识别要添加到地形的要素。每个要素必须与地形位于同一要素数据集中，并通过以下属性定义其角色：</para>
        ///   <bulletList>
        ///     <bullet_item>输入要素 - 要添加到地形的要素类的名称。</bullet_item><para/>
        /// <bullet_item>高度字段 - 包含要素高度信息的字段。可以指定任何数值字段，并且启用 z 的要素也可以选择几何字段。如果选择该<none>选项，则从曲面插值 z 值。</bullet_item><para/>
        ///     <bullet_item>类型 - 表面要素类型，用于定义要素对地形的影响。质量点表示有助于 z 测量的特征;虚线表示具有已知 z 测量值和多种面类型的线性要素。虚线和基于面的要素类型还具有硬限定符和软限定符，用于定义导出为栅格时要素边缘周围的插值行为。软要素表现出坡度的逐渐变化，而硬要素则表现出明显的不连续性。</bullet_item><para/>
        ///     <bullet_item>组 - 定义每个贡献要素的组。在不同细节级别上表示相同地理要素的虚线和面表面要素的未规范旨在以特定比例范围显示。可以通过分配相同的数值来对表示不同细节级别的相同地理要素的数据进行分组。例如，将两个具有高细节和低细节级别的边界要素分配给同一组将确保其关联的显示比例范围没有重叠。</bullet_item><para/>
        ///     <bullet_item>最小/最大分辨率 - 定义在地形中强制实施要素的金字塔分辨率范围。质量点必须使用最小和最大范围的值。</bullet_item><para/>
        ///     <bullet_item>概览 - 指示是否在地形数据集的最粗略表示处强制执行要素。要最大限度地提高显示性能，请确保概览中表示的要素类包含简化的几何。仅对质量点以外的要素类型有效。</bullet_item><para/>
        ///     <bullet_item>嵌入 - 将此选项设置为 TRUE 表示源要素将被复制到隐藏要素类，该要素类将被 terrain 引用且仅可用于该要素类。嵌入式要素将无法直接查看，因为它们只能通过地形工具访问。仅对多点要素有效。</bullet_item><para/>
        ///     <bullet_item>嵌入名称 - 嵌入要素类的名称。仅当正在嵌入功能时才适用。</bullet_item><para/>
        ///     <bullet_item>嵌入字段 - 指定要保留在嵌入要素类中的 BLOB 字段属性。这些属性可用于对地形进行符号化。LAS 属性可通过 LAS 转多点工具存储在多点要素的 BLOB 字段中。</bullet_item><para/>
        ///     <bullet_item>锚点 - 指定点要素类是否将锚定到所有 terrain 金字塔级别。锚点永远不会被过滤或变薄，以确保它们持续存在于地形表面。此选项仅适用于单点要素类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Updated Input Terrain</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_out_terrain { get; set; }


        public AddFeatureClassToTerrain SetEnv(int? autoCommit = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, workspace: workspace);
            return this;
        }

    }

}